﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Cielo.API.XML.Helpers;

namespace Cielo.API.XML
{
    internal class ConversorGatewayXML
    {
        private System.Xml.XmlElement noRequisicaoTransacao;

        public ConversorGatewayXML(IGatewayProxy gateway)
        {
            noRequisicaoTransacao = XmlTagBuilder.CreateXmlElement("requisicao-transacao");
            noRequisicaoTransacao.Attributes.Append(XmlTagBuilder.CreateXmlAttribute("id", "1"));
            noRequisicaoTransacao.Attributes.Append(XmlTagBuilder.CreateXmlAttribute("versao", "1.1.1"));

            var dadosEcNode = XmlTagBuilder.CreateXmlElement("dados-ec");
            dadosEcNode.AppendChild(XmlTagBuilder.CreateXmlElement("numero", gateway.NumeroAfiliacao));
            dadosEcNode.AppendChild(XmlTagBuilder.CreateXmlElement("chave", gateway.ChaveAcesso));
            noRequisicaoTransacao.AppendChild(dadosEcNode);

            var dadosPortador = XmlTagBuilder.CreateXmlElement("dados-portador");
            dadosPortador.AppendChild(XmlTagBuilder.CreateXmlElement("numero", gateway.Cliente.Cartao.NumeroCartao));
            dadosPortador.AppendChild(XmlTagBuilder.CreateXmlElement("validade", gateway.Cliente.Cartao.DataExpiracao));
            dadosPortador.AppendChild(XmlTagBuilder.CreateXmlElement("indicador", "1"));
            dadosPortador.AppendChild(XmlTagBuilder.CreateXmlElement("codigo-seguranca", gateway.Cliente.Cartao.CodigoSeguranca));
            noRequisicaoTransacao.AppendChild(dadosPortador);


            var dadosPedidoNode = XmlTagBuilder.CreateXmlElement("dados-pedido");
            dadosPedidoNode.AppendChild(XmlTagBuilder.CreateXmlElement("numero", gateway.RequisicaoPagamento.Numero));
            dadosPedidoNode.AppendChild(XmlTagBuilder.CreateXmlElement("valor", gateway.RequisicaoPagamento.Valor));
            dadosPedidoNode.AppendChild(XmlTagBuilder.CreateXmlElement("moeda", gateway.RequisicaoPagamento.Moeda));
            dadosPedidoNode.AppendChild(XmlTagBuilder.CreateXmlElement("data-hora", gateway.RequisicaoPagamento.Data));
            dadosPedidoNode.AppendChild(XmlTagBuilder.CreateXmlElement("idioma", "PT"));
            noRequisicaoTransacao.AppendChild(dadosPedidoNode);


            var formaPagamentoNode = XmlTagBuilder.CreateXmlElement("forma-pagamento");
            formaPagamentoNode.AppendChild(XmlTagBuilder.CreateXmlElement("bandeira", gateway.FormaPagamento.Bandeira));
            formaPagamentoNode.AppendChild(XmlTagBuilder.CreateXmlElement("produto", gateway.FormaPagamento.TipoProduto));
            formaPagamentoNode.AppendChild(XmlTagBuilder.CreateXmlElement("parcelas", gateway.FormaPagamento.Parcelas));
            noRequisicaoTransacao.AppendChild(formaPagamentoNode);
            noRequisicaoTransacao.AppendChild(XmlTagBuilder.CreateXmlElement("autorizar", "3"));
            noRequisicaoTransacao.AppendChild(XmlTagBuilder.CreateXmlElement("capturar", gateway.HabilitarCapturaAutomatica.ToString().ToLower()));

        }
        public override string ToString()
        {
            var resultadoXMl = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>" + noRequisicaoTransacao.OuterXml;
            return resultadoXMl;
        }

    }
}
